//UTF-8 encoded
/* "qDroid v.2009.04.27 pre-alfa-2"
 * qdl_testMaster.h
 *
 *  Created on: 07.09.2010
 *      Author: Denjs
 *
 * Это класс поддержки тестирования функциональности QT приложений
 *
 * Не забудьте, что только "слотовые" функции могут быть вызваны из скрипта
 * и объявленные с Q_INVOKABLE
 *
 */

#ifndef t_testMaster_H_
#define t_testMaster_H_

#include <QtCore>
#include <QtScript>
#include <QDRTestMaster.h>

class t_testMaster :public QDRTestMaster //мы делаем QDroid обертку для, изначально, стороннего класса
{
    Q_OBJECT

public:
        t_testMaster();
        virtual ~t_testMaster();

    	//это (ниже) нужно что бы можно было засунуть класс в контейнер QList
    	// возможно так-же связано с работой QtScript движка - см функции
		// после определения класса
		//
    	// спец. настройки для QtScript (v 2008.11.25)
    	// Шаг 1 из 8
        t_testMaster(const t_testMaster &other);

    	//это (ниже) нужно что бы можно было засунуть t_FileList в контейнер QList
    	// возможно так-же связано с работой QtScript движка - см функции
    	// после определения класса
    	//
    	// спец. настройки для QtScript (v 2008.11.25)
    	// Шаг 2 из 8
        t_testMaster& operator=(const t_testMaster &other);


    	// спец. настройки для QtScript (v 2008.11.25)
    	// Шаг 2.2 из 8
                bool operator==(const t_testMaster &other ) const;


public slots:
	QString GetId();

};

//----------------------------------------------------------------------
//нужно чтобы можно было передавать эти элементы как параметры в функции внутри QtScript
// спец. настройки для QtScript (v 2008.11.25)
// Шаг 3 из 8
Q_DECLARE_METATYPE(t_testMaster*);

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 4 из 8
static QScriptValue f_qdroid_t_testMaster_toScriptValue(QScriptEngine *engine, t_testMaster* const &in)
{ return engine->newQObject(in); }

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 5 из 8
static void f_qdroid_t_testMaster_fromScriptValue(const QScriptValue &object, t_testMaster* &out)
{ out = qobject_cast<t_testMaster*>(object.toQObject()); }

// спец. настройки для QtScript (v 2008.11.25)
// Шаг 6 из 8
//конструктор для последующего его определения как new в скрипте
static QScriptValue f_qdroid_t_testMaster_constructor(QScriptContext *QSContext, QScriptEngine *QSEngine)
	{
		//t_BaseBot BaseBot;
		QScriptValue QtSObject;
                QtSObject=QSEngine->newQObject(new t_testMaster()); //
		return QtSObject;
	}

// шаги 7 и 8 должны быть выполнены в программе которая собирается использовать данный класс совместно со скриптовым движком
//// спец. настройки для QtScript (v 2008.11.25)
//// Шаг 7 из 8
//// - это qScriptRegisterMetaType регистрация но это нужно сделать в головном классе
//// например в глобальной функции "define__qdroid_qtscript_functions()"
////// t_FileList TYPE defenition
//	qScriptRegisterMetaType(_QSEngine, f_qdroid_t_testMaster_toScriptValue, f_qdroid_t_testMaster_fromScriptValue);

//// спец. настройки для QtScript (v 2008.11.25)
//// Шаг 8 из 8
////- определение конструктора в контексте скрипта
////// t_FileList NEW constructor defenition
//	QScriptValue fun5_constr = _QSEngine->newFunction(f_qdroid_t_testMaster_constructor);
//	_QSEngine->globalObject().setProperty("t_testMaster", fun5_constr);

static int f_qdroid_t_testMaster_register(QScriptEngine *_QSEngine)
	{
		//шаг 7 регистрация метатипа
                qScriptRegisterMetaType(_QSEngine, f_qdroid_t_testMaster_toScriptValue, f_qdroid_t_testMaster_fromScriptValue);
		//шаг 8 регистрация конструктора
                _QSEngine->globalObject().setProperty("t_testMaster", _QSEngine->newFunction(f_qdroid_t_testMaster_constructor));
		return 0;
	}
//----------------------------------------------------------------------

#endif /* t_testMaster_H_ */
